home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
C/C++ Interactive Reference Guide
/
C-C++ Interactive Reference Guide.iso
/
c_ref
/
csource3
/
104_01
/
time.c
< prev
next >
Wrap
Text File
|
1979-12-31
|
5KB
|
203 lines
/********************************************************/
/* */
/* copyright March ,1981 By Mike Bernson */
/* */
/* program used to set and display time on QT */
/* s-100 clock calendar board */
/* */
/* command format: */
/* time [hh:mm:ss] [am,pm] [mm/dd/yy] [day] */
/* */
/********************************************************/
#define CONTROL 129 /* address of control port */
#define ADDRESS 129 /* address port on clock board */
#define DATA 130 /* data port for clock board */
#define HOLD 0x10 /* bit for hold line on clock */
#define READ 0x20 /* bit for read line on clock */
#define WRITE 0x10 /* bit for write line on clock */
#define TRUE 1
#define FALSE 0
main(argc,argv)
int argc;
char *argv[];
{
char string[80],*check;
int am;
/* if no arg on command line display time */
if (argc==1) {
puts("Current time is ");
puts(time_display(string));
exit();
}
am=-1;
check=argv[2];
if (argc==3) {
if (isalpha(check[0])) {
if (check[0]=='A') am=0;
if (check[0]=='P') am=1;
if (am != -1 && (check[1] !='M' || check[2] != 0)) {
puts("Bad command line must be ");
puts(" (HH:MM [AM || PM]) [MM/DD/YY]");
exit();
}
}
}
/* set time value from input */
if (time_set(argv[1],am)) exit();
puts("\nTime set to ");puts(time_display(string));
exit();
}
/********************************************************/
/* */
/* time_display */
/* */
/* function: to build a string for current */
/* time in format hh:mm:ss [am,pm] */
/* */
/* */
/* input: string to put current time in */
/* */
/* return: pointer to input string */
/* */
/* date written: March 8, 1981 By Mike Bernson */
/* */
/********************************************************/
time_display(string)
char *string;
{
char clock[6],*temp1;
int temp,am;
/* set hold on clock and read clock time */
outp(CONTROL,HOLD);
temp=-1;
while(++temp<6) {
outp(DATA,temp | READ);
clock[temp]=inp(DATA);
}
outp(CONTROL,0);
am=-1;
if ((clock[5] & 8) == 0) am=(clock[5] & 4)/4;
clock[5] &= 3;
/* convert time to printable string */
temp1=string;
temp=6;
while(--temp >= 0 ) {
if (temp==1 || temp==3) *temp1++=':';
*temp1++=clock[temp]+'0';
}
/* add am or pm if needed */
switch(am) {
case -1 :
strcpy(temp1," ");
break;
case 0 :
strcpy(temp1," AM ");
break;
case 1 :
strcpy(temp1," PM ");
break;
}
return string;
}
/********************************************************/
/* */
/* time_set */
/* */
/* function: to set the time from input */
/* */
/* input: string that has time to set */
/* am/pm/24 switch */
/* */
/* date_written: Mrach 8, 1981 By Mike Bernson */
/* */
/********************************************************/
time_set(string,am)
char *string;
int am;
{
char clock[13];
int temp;
/* build array to send to clock for time */
for(temp=5; temp>=2; temp--) {
if (temp==5 && string[1] == ':') {
clock[5]=0;
continue;
}
if (temp==3)
if (*string++ != ':') {
puts("Bad time format missing \":\"");
puts("(HH:MM [AM || PM])");
return TRUE;
}
if (!isdigit(*string)) {
puts("Bad digit in time format");
return TRUE;
}
clock[temp]=(*string++) & 0x0f;
}
clock[1]=clock[0]=0;
if (*string !=0) {
puts("Bad time format too many digits (HH:MM [AM || PM])");
return TRUE;
}
/* check to see that ten second and tens of hours less then 7 */
if (clock[3]>5) {
puts("Bad tens of minutes digit");
return TRUE;
}
/* check hours dights */
temp=clock[5]*10+clock[4];
if ((temp<1 || temp>24) && am<0) {
puts("Bad hours range is 1-24 only");
return TRUE;
}
if ((temp<1 || temp>12) && am>=0) {
puts("Bad hours range is 1-12 only");
return TRUE;
}
/* set 24 hour mode and am/pm bits */
if (am<0) clock[5] |= 8;
else clock[5] |= am * 4;
/* wait for user to hit return before setting time */
puts("Hit any key to set clock ");bios(3,0);
/* send data to clock */
for(temp=5; temp>=0; --temp) {
outp(DATA,temp);
outp(ADDRESS,clock[temp] | HOLD);
outp(DATA,temp | WRITE);
outp(DATA,temp);
}
outp(CONTROL,0);
return FALSE;
}
}
LSE;
}
8δ)8δ))8δ))